﻿using System;
using Android.Database.Sqlite;
using System.IO;
using System.Collections.Generic;
using SQLite;

namespace Timer
{
	public class DataManager
	{
		private string sqldb_message;
		private bool sqldb_available;
		private SQLiteConnection conn;

		public DataManager ()
		{
			sqldb_message = "";
			sqldb_available = false;
		}

		public void OpenDatabase2(string sqldb_name)
		{
			try
			{
				string sqldb_location = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
				string sqldb_path = Path.Combine(sqldb_location, sqldb_name);
				bool sqldb_exists = File.Exists(sqldb_path);
				if(sqldb_exists)
					conn = new SQLiteConnection (sqldb_path);
			}
			catch(Android.Database.Sqlite.SQLiteException ex) 
			{
				sqldb_message = ex.Message;
			}
		}

		public void CloseDatabase2()
		{
			conn.Close ();
		}

		public long UpdateRegistro(Registro_de_Tiempos_de_Proceso registro)
		{
			using (var db = conn)
			{
				try
				{
					return db.Update(registro);
				}
				catch (Exception ex)
				{
					return -1;
				}
			}
		}

		public string GetUsuario(string user, string pwd)
		{
			string IdUsuario = "";

			var registro = conn.Query<TTUsuarios>(String.Format("SELECT * FROM TTUsuarios WHERE LOWER(Clave_de_Acceso) = '{0}' AND Contrasena = '{1}'", user.ToLower(), pwd));
			foreach (var usuario in registro)
				IdUsuario = usuario.IdUsuario;

			return IdUsuario;
		}

		public string GetProceso(string value)
		{
			string ProcesoDesc = "";

			var registro = conn.Query<Proceso>(String.Format("SELECT * FROM Proceso WHERE LOWER(Clave) = '{0}'", value.ToLower()));
			foreach (var proceso in registro)
				ProcesoDesc = proceso.Nombre;

			return ProcesoDesc;
		}

		public long InsertTiempo(Registro_de_Tiempos_de_Proceso registro)
		{
			using (var db = conn)
			{
				try
				{
					return db.Insert(registro);
				}
				catch (Exception ex)
				{
					return -1;
				}
			}
		}

		public List<Registro_de_Tiempos_de_Proceso> GetTiempos()
		{
			using (var db = conn)
			{
				try
				{
					var registros = db.Query<Registro_de_Tiempos_de_Proceso>("SELECT * FROM Registro_de_Tiempos_de_Proceso WHERE Enviado = 0");
					return registros;
				}
				catch (Exception ex)
				{
					return null;
				}
			}
		}
	}
}

